package ocumed.teams.teamd.application;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import ocumed.teams.IArzt;
import ocumed.teams.IBehandlung;
import ocumed.teams.ILeistung;
import ocumed.teams.IPatient;
import ocumed.teams.IPosition;
import ocumed.teams.OcumedFactory;
import ocumed.teams.PersistenceFactory;

/**
 *
 * @author Willi
 */
public class AppUntersuchung {

    private IBehandlung m_behandlung;
    private IPosition m_actPos;
    private boolean m_isDirty;

    public AppUntersuchung() {
    }

    public void addPosition() {
        IPosition pos = m_behandlung.createPosition();

        //pos.setPositionid(m_behandlung.getiPositions().size());
        pos.setiLeistung(OcumedFactory.getInstance().getiLeistung(1));

        m_behandlung.addPosition(pos);

        m_isDirty = true;
        
        m_actPos = pos;
    }

    public void setPosition(IPosition pos) {
        m_actPos = pos;
    }

    public UntersuchungTableModel getTableModel() {

        Set<IPosition> l = new HashSet<IPosition>();

        if (m_behandlung != null) {

            IPatient p = m_behandlung.getiPatient();

            // alte
            for (IBehandlung b : p.getiBehandlungs()) {
                for (IPosition pos : b.getiPositions()) {
                    l.add(pos);
                }
            }

            // aktuelle
            for (IPosition pos : m_behandlung.getiPositions()) {
                l.add(pos);
            }
        }
        return new UntersuchungTableModel(l);
    }

    public void createBehandlung(int patient) {
        IPatient p = OcumedFactory.getInstance().getiPatient(patient);

        m_behandlung =
                p.createiBehandlung((IArzt) OcumedFactory.getInstance().getActIBenutzer());

        m_behandlung.setBehandlungvon(new Date());

        m_isDirty =
                false;
    }

    public void save() {
        IPatient patient = m_behandlung.getiPatient();

        m_behandlung.setBehandlungbis(new Date());

        patient.addiBehandlung(m_behandlung);

        PersistenceFactory.getInstance().put(patient);

        m_isDirty = false;
    }

    public IBehandlung getBehandlung() {
        return m_behandlung;
    }
    
    public boolean isPosFromBehandlung(){
        if (m_behandlung != null && m_actPos != null){
            return m_behandlung == m_actPos.getiBehandlung();
        }
        return false;
    }

    public int getPatientId() {
        return m_behandlung.getiPatient().getPatientid();
    }

    public String getPatientVorname() {
        return m_behandlung.getiPatient().getPatientvorname();
    }

    public String getPatientNachname() {
        return m_behandlung.getiPatient().getPatientnachname();
    }

    public String getPatientSvn() {
        return m_behandlung.getiPatient().getPatientsvn();
    }

    public Date getPatientGebdatum() {
        return m_behandlung.getiPatient().getPatientgebdatum();
    }

    public ILeistung getLeistung() {
        if (m_actPos != null) {
            return m_actPos.getiLeistung();
        }

        return null;
    }

    public void setLeistung(ILeistung l) {
        if (m_actPos != null) {
            m_actPos.setiLeistung(l);
        }

    }

    public String getPositiontext() {
        if (m_actPos != null) {
            return m_actPos.getPositiontext();
        }

        return null;
    }

    public void setPositiontext(String positiontext) {
        if (m_actPos != null) {
            m_actPos.setPositiontext(positiontext);
        }

    }

    public String getPositionSehtestL() {
        if (m_actPos != null && m_actPos.getPositionSehtestL() != null) {
            return m_actPos.getPositionSehtestL().toString();
        }

        return null;
    }

    public void setPositionSehtestL(Double positionSehtestL) {
        if (m_actPos != null) {
            m_actPos.setPositionSehtestL(positionSehtestL);
        }

    }

    public String getPositionSehtestR() {
        if (m_actPos != null && m_actPos.getPositionSehtestR() != null) {
            return m_actPos.getPositionSehtestR().toString();
        }

        return null;
    }

    public void setPositionSehtestR(Double positionSehtestR) {
        if (m_actPos != null) {
            m_actPos.setPositionSehtestR(positionSehtestR);
        }

    }

    public String getPositionFehlL() {
        if (m_actPos != null && m_actPos.getPositionFehlL() != null) {
            return m_actPos.getPositionFehlL().toString();
        }

        return null;
    }

    public void setPositionFehlL(Double positionFehlL) {
        if (m_actPos != null) {
            m_actPos.setPositionFehlL(positionFehlL);
        }

    }

    public String getPositionFehlR() {
        if (m_actPos != null && m_actPos.getPositionFehlR() != null) {
            return m_actPos.getPositionFehlR().toString();
        }

        return null;
    }

    public void setPositionFehlR(Double behandlungFehlR) {
        if (m_actPos != null) {
            m_actPos.setPositionFehlR(behandlungFehlR);
        }

    }

    public boolean getPositionBestimmtSchatten() {
        if (m_actPos != null) {
            return m_actPos.getPositionBestimmtSchatten();
        }

        return false;
    }

    public void setPositionBestimmtSchatten(boolean positionBestimmtSchatten) {
        if (m_actPos != null) {
            m_actPos.setPositionBestimmtSchatten(positionBestimmtSchatten);
        }

    }

    public boolean getPositionBestimmtFraktrometer() {
        if (m_actPos != null) {
            return m_actPos.getPositionBestimmtFraktrometer();
        }

        return false;
    }

    public void setPositionBestimmtFraktrometer(boolean positionBestimmtFraktrometer) {
        if (m_actPos != null) {
            m_actPos.setPositionBestimmtFraktrometer(positionBestimmtFraktrometer);
        }

    }

    public boolean getPositionBestimmtPhoropter() {
        if (m_actPos != null) {
            return m_actPos.getPositionBestimmtPhoropter();
        }

        return false;
    }

    public void setPositionBestimmtPhoropter(boolean positionBestimmtPhoropter) {
        if (m_actPos != null) {
            m_actPos.setPositionBestimmtPhoropter(positionBestimmtPhoropter);
        }

    }

    public boolean isDirty() {
        return m_isDirty;
    }
}
